Storage devices are essential components of many computer and information systems. Typically, a data buffer system is utilized to manage transfer of data between a host and a storage device such as a disk drive. The data buffer system includes a data buffer for storing data retrieved from or to be stored in the disk drive. The data buffer typically includes several data blocks for storage of data.
In some systems, a buffer list is utilized to manage the status and location of the data blocks in the buffer. The buffer list includes several entries each corresponding to a data block and containing information about the data block. Each buffer list entry contains the full memory address of a corresponding data block or sector in memory. Therefore, if a host command requires access to the 10th sector in memory, the 10th buffer list entry is accessed to obtain the memory address of the 10th sector. However, storing full block addresses in the buffer list entries occupies large amounts of precious memory space. Further, rearranging the buffer list requires rewrite of at least a portion of the list. For example, if the buffer list is to be split into two sections, a new link entry has to be added to the end of one section to link it to the other section. This requires a rewrite of at least one section of the buffer list to open up space in memory for the new link entry.
To coordinate the interaction between the host and the disk drive in storing data into, or retrieving data from, the data blocks, each buffer list entry further includes a status field representing the status of data in a corresponding data block. The status fields allow the host and disk drive to coordinate their interaction by informing one another of each others' actions on data blocks via status codes. However, a disadvantage of such systems is that each status code represents a unique status and a unique action to be performed next by the host or the task drive. The same status code cannot be reused for different actions. Therefore, from one use of a data block by one task to the next, the status code in the corresponding buffer list entry must be re-written with a different status code. The frequent re-writing of the status codes in the buffer list entries is time consuming and reduces data transfer rates between the host and the disk drive.
In systems without a buffer list, when the disk drive receives a read or a write request from the host, in satisfying the request, the disk drive monitors several conditions including the status of the data coming off of or on to the disk drive, the status of the host interface, and the status of the data buffer during the entire operation. The disk drive then notifies the host when the request is satisfied. The monitoring and notification is performed by a programmed microprocessor in the disk drive controller. The microprocessor monitors a status change due to completion of one task (e.g., a sector has been transferred from the disk by the disk drive) and notifies the other task of the status change (e.g., notifies the host that the sector is now available for transfer by updating the status code in the corresponding buffer list entry). A major disadvantage of such systems is that the microprocessor driven monitoring and notification actions significantly reduce data transfer rates due to large delays inherent in microprocessor processing.
There is, therefore, a need for an efficient and flexible method of managing data in a data buffer. There is also a need for an efficient method of coordinating data transfer between a host and a disk drive through the data buffer.